Software development is complex and expensive. Many techniques have been developed to attempt to reduce the complexity, produce more reliable software, and reduce the expense.
Many software development projects use a waterfall development process. A waterfall process is a sequential software development process, that has, for example, phases of conception, initiation, analysis, design, construction, testing, production and maintenance. The waterfall development process has been very successful, especially for large projects in which the final product is well-defined and unlikely to change significantly once finished. The waterfall process, however, is not suitable for software that is continuously being improved, because each improvement has to go through all of the stages above before finally being incorporated into the product. The waterfall process leads to a sequential approach in which each new feature to be added to the product must be added in sequence and tested before the next feature can be started.
In recent years, software projects have become larger, relying on large stable, prewritten components being connected together to form the software. Each of the prewritten components may gradually evolve as bugs are fixed and new functionality is added. However, the basic functionality of each prewritten component remains the same. Thus, software development is about connecting together these prewritten components and checking that the changes to the prewritten components do not adversely affect the software as a whole. Any software project may comprise a large number of these prewritten components, all of which may be constantly evolving. The waterfall process is a slow and expensive method to test and deploy software written in the above manner, causing unnecessary delays in the time it takes a customer to receive updated software that is more reliable and has more features.